import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Clase Warrior subclase de Enemigo para representación de un Enemigo (Enemigo inteligente)
 * @author Programación Orientada a Objetos (Adrian Cerda Cerda , Jorge Armando Tovar Ojeda)
 * @version Maze of Souls (24 de noviembre del 2012)
 */
public class Warrior extends Enemigo
{
    /**
     *Diferentes imagenes del Enemigo(Warrior)
     */
     private GreenfootImage Image1= new GreenfootImage("enemigo03.gif");
     private GreenfootImage Image2= new GreenfootImage("enemigoP203.gif");
     private GreenfootImage Image3= new GreenfootImage("enemigo03puno.gif");
     private GreenfootImage Image4= new GreenfootImage("enemigo03punoP2.gif");
     private GreenfootImage Image5= new GreenfootImage("enemigo03puno.gif");
     private GreenfootImage Image6= new GreenfootImage("enemigo03punoP2.gif");
     private GreenfootImage Image7= new GreenfootImage("enemigo3.gif");
     private GreenfootImage Image8= new GreenfootImage("enemigoP23.gif");
     private GreenfootImage Image9= new GreenfootImage("enemigo03pat.gif");
     private GreenfootImage Image10= new GreenfootImage("enemigo03patP2.gif");
     private GreenfootImage Image11= new GreenfootImage("enemigo03patada.gif");
     private GreenfootImage Image12= new GreenfootImage("enemigo03patadaP2.gif");
     private GreenfootImage Image13= new GreenfootImage("enemigo03golpeado.gif");
     private GreenfootImage Image14= new GreenfootImage("enemigo03golpeadoP2.gif");
    private int imagen;  //imagen que va estar activada
    private int dir=1;// dirección del Enemigo
    private int contAtaque=0; 
    private Fondo f;// Para la obtención del mundo
    public void act() 
    {
        contAtaque= contAtaque+1;
         atacar();
       movimiento();
       if(super.puedeAvanzar(this));
          mover();
      // if(tiempo(100)==1)
      // atacar();
       lanzarAtaques();

    }    
    /**
     * Cambia las imagenes del enemigo
     */
    public void movimiento()
    {
        
        switch(imagen)
        {
            case 1:
                  setImage(Image1);
               break;
            case 2:
               setImage(Image2);
               break;
             case 3:
               setImage(Image3);
                if(tiempo(20)==1)
               imagen=1;
               break;
            case 4:
               setImage(Image4);
               if(tiempo(20)==1)
               imagen=2;
               break;
            case 7:
               setImage(Image7);
                if(tiempo(10)==1)
               imagen=1;
               break;
            case 8:
               setImage(Image8);
               if(tiempo(10)==1)
               imagen=2;
               break;
            case 9:
               setImage(Image9);
               imagen=11;
               break;
            case 10:
               setImage(Image10);
               imagen=12;
               break;
              case 11:
               setImage(Image11);
               if(tiempo(10)==1)
               imagen=1;
               break;
            case 12:
               setImage(Image12);
               if(tiempo(10)==1)
               imagen=2;
               break;
            case 13:
               setImage(Image13);
               if(tiempo(10)==1)
               imagen=1;
               break;
            case 14:
               setImage(Image14);
               if(tiempo(10)==1)
               imagen=2;
               break;
             
            
        }
               
               
    }
    /**
     * manda llamar el cambio de imagenes cada cierto tiempo con la dirección a la derecha
     */
    public void cambia()
    {
      
        int r= Greenfoot.getRandomNumber(4);
        if(tiempo(10)==1)
        {
                if(r==0)
                  imagen=1;
               else
                if(r==1)
                  imagen=3;
                else
                  if(r==2)
                   imagen=9;
                else
                  if(r==3)
                   imagen=9;
            
               }

    }
    /**
     *manda llamar el cambio de imagenes cada cierto tiempo con la dirección a la zquierda
     */
    public void cambiaP2()
    {
          int r= Greenfoot.getRandomNumber(4);
        if(tiempo(10)==1)
        {
                if(r==0)
                  imagen=2;
                else
                if(r==1)
                imagen=4;
                else
                  if(r==2)
                   imagen=10;
                 else
                  if(r==3)
                   imagen=10;
          
                }
        
    }
    /**
     * Define el comportamiento de como se va a mover este Enemigo (Warrior)
     */
    public void mover()
    {
        Fondo f= (Fondo)super.getWorld();
        if(f!=null)
        {
         if(f.regresaP()==1)
         {
        
           if(f.regresaX()< getX())
           {
           dir=2;
           cambiaP2();
           if(getX()>20)
             super.move(-1);
          }
          else if(f.regresaX()>getX())
          {
            dir=1;
            cambia();
           if(getX()< getWorld().getWidth()-20)
           super.move(1);
         }
         if(f.regresaY() > getY()  )
          {
           if( getY()< getWorld().getHeight()-40)
          setLocation(getX(), getY()+1);
          }
         else if(f.regresaY() <getY())
         {
            if(getY()>40)
             setLocation(getX(), getY()-1);
         }
       }
    }
          
        
    }
    /**
     * para el lanzamiento de ataques
     */
    public void lanzarAtaques()
    {
         f=(Fondo)super.getWorld();
        
             if(imagen==7)
             {
                    Otro otro= new Otro(1);
                    f.addObject(otro,getX()+45, getY()-12);
                
            }
            else
            if(imagen==8)
            {
                   Otro otro= new Otro(2);
                  f.addObject(otro,getX()-45, getY()-12);
                  
                }

        }
        /**
         * @return x posición de Warrior en X
         */
        public int x()
        {
            return getX();
        }
        /**
         * @return la posición de Warrior en Y
         */
        
        public int y()
        {
            return getY();
        }
    /**
     * Metodo del conteo del tiempo
     */
     public int tiempo(int t)
      {
             if(contAtaque>t)
             {
                contAtaque=0;
                return 1;
             }
             else 
                return 0;
     }
    /**
     * metodo para cambiar la imagen 
     */
    public void modificaImagen(int ima)
     {
            imagen = ima;
      }
    /**
     * Define el comportamiento de como va atacar este enemigo(Warrior)
     */
    public void atacar()
    {
        Actor l;
        l= getOneIntersectingObject(Link.class);
        if(l!= null)
        {
            Fondo f= (Fondo) super.getWorld();
            f.cambiaVida(-1);
        }
    } 
    
    }